#ifndef MOSES_VISITOR_H
#define MOSES_VISITOR_H

namespace moses
{
	class BinaryExpr;
	class Call;	
	class Function;
	class FunctionRow;

	class Identifier;	
	class Literal;
	class Module;	
	class Pattern;
		
	class Type;
	class UnaryExpr;
	
	class Visitor
	{
	public:
		virtual void Accept(BinaryExpr *pItem) = 0;
		virtual void Accept(Call *pItem) = 0;
		virtual void Accept(Function *pItem) = 0;
		virtual void Accept(FunctionRow *pItem) = 0;
		
		virtual void Accept(Identifier *pItem) = 0;		
		virtual void Accept(Literal *pItem) = 0;
		virtual void Accept(Module *pItem) = 0;		
		virtual void Accept(Pattern *Itemp) = 0;
				
		virtual void Accept(Type *pItem) = 0;
		virtual void Accept(UnaryExpr *pItem) = 0;
		
	};
}

#endif